import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Nivel1 here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Niveles extends World
{ 
    //Variables de instancia
    private int Nivel;  // variable para poder cambiar de nivel
    private int Scroll;//Variable que controla el scroll de los niveles
    private int ninjaPosX;// variable X para la posiscion de el ninja 
    private int ninjaPosY;//variable para la posicion de el ninja en Y
    private int posMoneda;
    private int soundCounter;//variable para el sonido de fondo el del juego 
    private int ayudaSig =0; //variable para pasar de siguiente pagina en la ayuda
    public GreenfootSound soundNivel1;    
    public GreenfootSound soundNivel2;
    
    Ninja ninja = new Ninja();
    SaludL salud = new SaludL();
   
    
    /**
     * Constructor de el Niveles 
     * 
     */
    public Niveles()
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(800, 320, 1, false);        
        Greenfoot.setSpeed(47); //Asigna la velocidad de el juego
        //Greenfoot.start();//inicia el juego
       
        soundNivel1 = new GreenfootSound("fondo1.wav");
        soundNivel1.setVolume(70);
        
        soundNivel2 = new GreenfootSound("fondo2.wav");
        soundNivel2.setVolume(70);
       
        posMoneda = 50;
        soundCounter = 0;
        iniciaNivel( 0 );
        
        setPaintOrder(Cuchillo.class,Vida.class,Letrero.class,SaludL.class,Cerca.class,Ninja.class, Moneda.class, Roca.class,Sumo.class, NinjaM.class,Ladron.class, Cuervo.class);
      
    }
   
    /*
    * Medtodo actuda de el mundo 
    * 
    */
    public void act(){
     soundCounter ++;
      if(Nivel == 1){
        soundNivel1.play();
        }else if(Nivel == 2){
               soundNivel2.play();
            }else if(Nivel == 3){
                //  MusicaN3.play();
            }
            
    }    
    /*
     * Inicia el Nivel correspondiente dependiendo de el avance de el jugador 
     */
    public void iniciaNivel(int nivel)
    {
        Nivel = nivel;
        if(Nivel == 0)//****************MENU****************
           preparaMenu();
           else if(Nivel == 1)//****************************** NIVEL 1 **************************
           preparaNivel1(1);
           else if(Nivel == 2)//****************************** NIVEL 2 **************************
            preparaNivel2(1);
            else if(Nivel == 3)//****************************** NIVEL 3 **************************
              preparaNivel3(2);
              else if(Nivel == 4)
                     ganaste();
                else if (Nivel == -1)//****************************** GAME OVER **************************
                     gameOver();
    }
    /*
     * Metodo para preparar el nivel 1
     */
    public void preparaNivel1(int scroll){
       Scroll = scroll;
       setBackground("Nivel1.png");
       removeObjects(getObjects(null));
        if(Scroll == 1){ //************************Escenario 1 Nivel 1***************************
         ninjaPosX = 40;
         ninjaPosY = 280;
         //posicion inicial de el ninja
                       
        addObject(ninja, ninjaPosX ,ninjaPosY);
         
        addObject(new SaludL(),150,10);
        addObject(new Letrero("Puntos = 0", 1),400,20);
        
        addObject(new Letrero(" = 3", 2),500,20);
        addObject(new Vida(),470,20);
        
        addObject(new Letrero(" = 5", 3),600,20);
        addObject(new Cuchillo(),570,20);
        
        addObject(new Cuervo(),512,60);
        addObject(new Cuervo(),448,181);
        addObject(new Cuervo(),225,91);
         
         addObject(new Roca(), 350, 290);
         addObject(new Roca(), 748, 290);
         
         addObject(new Cerca(), 200, 230);//primera cerca
         addObject(new Cerca(), 527, 282);//Segunda Cerca
         
         for(int i=0; i < 4; i++)
           addObject(new Moneda(),100 +(i*posMoneda) ,300);
         
         for(int i=0; i< 4; i++)
             addObject(new Moneda(),350,250 - (i*posMoneda));
             
         for(int i=0; i < 5; i++)
             addObject(new Moneda(),450 +(i*posMoneda) ,300);
         
         for(int i=0; i< 3; i++)
             addObject(new Moneda(),670,200 - (i*posMoneda));
             
          for(int i=0; i< 4; i++)
             addObject(new Moneda(),750,250 - (i*posMoneda));
             
         
         addObject(new Ladron(), 835, 280);
         
       }else if(Scroll == 2){
        removeObjects(getObjects(null));
        ninjaPosX = 40;
        ninjaPosY = 280;
         //posicion inicial de el ninja
        
        addObject(new SaludL(),150,10);
        
        addObject(ninja, ninjaPosX ,ninjaPosY);
        
        ninja.CambiaLetros(1);
        
        ninja.CambiaLetros(2);
        addObject(new Vida(),470,20);
        ninja.CambiaLetros(3);
        addObject(new Cuchillo(),570,20);
        addObject(ninja, ninjaPosX ,ninjaPosY);
        
        addObject(new Cuervo(),448,142);
        addObject(new Cuervo(),225,49);
        addObject(new Cuervo(),512,90);
        
        addObject(new Roca(), 500, 290);
        addObject(new Roca(), 700, 290);
                
        addObject(new Cerca(), 200, 280);//primera cerca
        addObject(new Cerca(), 270, 250);//Segunda Cerca
        
         addObject(new Cerca(), 600, 150);//cuarta cerca
        
        addObject(new Ladron(), 835, 280);
        
        for(int i=0; i < 7; i++)
           addObject(new Moneda(),100 +(i*posMoneda) ,300);
           
        for(int i=0; i< 4; i++)
             addObject(new Moneda(),350,250 - (i*posMoneda));
             
        for(int i=0; i< 5; i++)
             addObject(new Moneda(),500,250 - (i*posMoneda));
         
        for(int i=0; i< 2; i++)
             addObject(new Moneda(),580 + (i*posMoneda),150);
             
             addObject(new Moneda(),600,300);
             
        for(int i=0; i< 4; i++)
             addObject(new Moneda(),700+(i*posMoneda),250 - (i*posMoneda));     
        }
       
    }
        
    /*
         * Metodo para preparar objetos de el nivel 2
         */
    public void preparaNivel2(int scroll){
       Scroll = scroll;
       removeObjects(getObjects(null));
       setBackground("Nivel2.png"); 
      if(Scroll == 1){
         ninjaPosX = 40;
         ninjaPosY = 280;
        addObject(new SaludL(),150,10);
        
       addObject(ninja, ninjaPosX ,ninjaPosY);
        
        ninja.CambiaLetros(1);
        
        ninja.CambiaLetros(2);
        addObject(new Vida(),470,20);
        ninja.CambiaLetros(3);
        addObject(new Cuchillo(),570,20);
        
        addObject(ninja, ninjaPosX ,ninjaPosY);
        
        addObject(new Cuervo(),700,142);
        addObject(new Cuervo(),512,60);
        
        addObject(new Roca(), 748, 290);
        
        addObject(new Cerca(), 170, 200);
        addObject(new Cerca(), 450, 150);
        addObject(new Agujero(), 650, 310);
                
        for(int i=0; i < 5; i++)
           addObject(new Moneda(),250 +(i*posMoneda) ,300);
          
        for(int i=0; i< 3; i++)
            addObject(new Moneda(),250+(i*posMoneda),250 - (i*posMoneda));
        
        for(int i=0; i< 4; i++)
             addObject(new Moneda(),750,250 - (i*posMoneda));
             
         for(int i=0; i< 3; i++)
            addObject(new Moneda(),600+(i*posMoneda),100 + (i*posMoneda));     
                 
        addObject(new NinjaM(), 550, 280);
        addObject(new Ladron(), 835, 280);
        
        }else if(Scroll == 2){
         removeObjects(getObjects(null));
        
         ninjaPosX = 40;
         ninjaPosY = 280;
       
        addObject(ninja, ninjaPosX ,ninjaPosY);
        addObject(new SaludL(),150,10);
        ninja.CambiaLetros(1);
        
        ninja.CambiaLetros(2);
        addObject(new Vida(),470,20);
        ninja.CambiaLetros(3);
        addObject(new Cuchillo(),570,20);
                
        addObject(new Cuervo(),448,142);
        addObject(new Cuervo(),225,49);
               
        addObject(new Roca(), 200, 290);
        
        addObject(new Cerca(), 370, 150);
        addObject(new Cerca(), 550, 200);
        
        addObject(new Agujero(), 770, 310);
    
        for(int i=0; i< 4; i++)
            addObject(new Moneda(),200,250 - (i*posMoneda));
        
        for(int i=0; i< 4; i++)
             addObject(new Moneda(),750 + (i*posMoneda),250) ;
             
        for(int i=0; i< 3; i++)
            addObject(new Moneda(),600,300 - (i*posMoneda));
            
        addObject(new NinjaM(), 570, 280);
        addObject(new NinjaM(), 420, 280);
        addObject(new Ladron(), 835, 280);
         
         }
    }
   /*
    * Metodo para preparar los objetos de el nivel3
    */
    public void preparaNivel3(int scroll){
      Scroll = scroll;
       removeObjects(getObjects(null));
       setBackground("Nivel3.png"); 
      if(Scroll == 1){
        removeObjects(getObjects(null));
        
         ninjaPosX = 40;
         ninjaPosY = 280;
        
         addObject(ninja, ninjaPosX ,ninjaPosY);
        addObject(new SaludL(),150,10); 
        ninja.CambiaLetros(1);
        
        ninja.CambiaLetros(2);
        addObject(new Vida(),470,20);
        ninja.CambiaLetros(3);
        addObject(new Cuchillo(),570,20);
        
        
         
        addObject(new Cuervo(),448,142);
        addObject(new Cuervo(),225,49);
        addObject(new Cuervo(),725,181);
        
        addObject(new Roca(), 270, 290);
        
        addObject(new Cerca(), 370, 150);    
        addObject(new Cerca(), 670, 280);
        addObject(new Agujero(), 170, 310);
        
             
         for(int i=0; i< 3; i++)
            addObject(new Moneda(),100+(i*posMoneda),250 - (i*posMoneda));
            
         for(int i=0; i< 4; i++)
            addObject(new Moneda(),270,250 - (i*posMoneda));
         
          for(int i=0; i< 3; i++)
            addObject(new Moneda(),500+(i*posMoneda),250 - (i*posMoneda));   
        
        addObject(new Sumo(), 700, 280);
        addObject(new NinjaM(), 570, 280);
        addObject(new NinjaM(), 500, 280);
        addObject(new Ladron(), 835, 280);
        
        }else if(Scroll == 2){ 
        ninjaPosX = 40;
         ninjaPosY = 280;
        
        addObject(ninja, ninjaPosX ,ninjaPosY);
         addObject(new SaludL(),150,10);
        ninja.CambiaLetros(1);
        
        ninja.CambiaLetros(2);
        addObject(new Vida(),470,20);
        ninja.CambiaLetros(3);
        addObject(new Cuchillo(),570,20);
        
        
        
        addObject(new Cuervo(),725,142);
        addObject(new Cuervo(),512,60);
        
        addObject(new Roca(), 748, 290);
        
        addObject(new Cerca(), 170, 200);
        addObject(new Cerca(), 450, 150);
       
        addObject(new Agujero(), 650, 310);
                
        for(int i=0; i < 5; i++)
           addObject(new Moneda(),250 +(i*posMoneda) ,300);
          
        for(int i=0; i< 3; i++)
            addObject(new Moneda(),250+(i*posMoneda),250 - (i*posMoneda));
        
        for(int i=0; i< 4; i++)
             addObject(new Moneda(),750,250 - (i*posMoneda));
             
         for(int i=0; i< 3; i++)
            addObject(new Moneda(),600+(i*posMoneda),100 + (i*posMoneda));     
                 
        addObject(new NinjaM(), 550, 280);
        addObject(new Ladron(), 835, 280);
        addObject(new Sumo(), 700, 280);
           
         
         }
    
    }
    
    /*
     * Metodo para cuando el jugador pierde el juego se muestra en pantalla un mensaje de Gameover
     */
    public void gameOver(){
      removeObjects(getObjects(null));
      setBackground("gameOver.jpg");
      Greenfoot.delay(200);
      preparaMenu();
    }
    
    /*
     * Metodo para cuando el jugador gana el juego se muestra un mensaje de Ganaste
     */
    public void ganaste(){
    
    removeObjects(getObjects(null));
    setBackground("ganaste.png"); 
    ninjaPosX = 40;
    ninjaPosY = 280;        
    addObject(ninja, ninjaPosX ,ninjaPosY);
    ninja.guardaPuntos();
    Greenfoot.delay(200);
    preparaMenu();
      
    }
    /*
     * Regresa el ninja(jugador principal
     */
    public Ninja ninja(){
      return ninja;
    }
    
    /*
     * prepara el menu incial de el juego
     */
    public void preparaMenu(){
       removeObjects(getObjects(null));
      setBackground("Menu.png");
       
       addObject(new Jugar(getWidth()/2,180), getWidth()/2, 180);
       addObject(new Ayuda( getWidth()/2,280), getWidth()/2, 280);
       addObject(new Records(getWidth()/4,280),getWidth()/4, 280);
       addObject(new Creditos(getWidth()/2 + getWidth()/4,280),getWidth()/2 + getWidth()/4, 280); 
    }
    
    /*
     * Muestra la ayuda de el juego
     */
    public void preparaAyuda(){
        removeObjects(getObjects(null));
        ayudaSig = 0;
        setBackground("AyudaM0.png");
        addObject(new Atras(20,20),20,20);
        addObject(new Adelante(getWidth()-20,getHeight()-20),getWidth()-20,getHeight()-20);
        Greenfoot.delay(20);
    }
    /*
     * Muestra los creditos del el juego
     */
    public void muestraCreditos(){
     removeObjects(getObjects(null));
     setBackground("CreditosM.png");
     addObject(new Atras(20,20),20,20);
     Greenfoot.delay(20);
    }
    
    /*
     * Muestra los records de el juego
     */
    public void muestraRecords(){
     removeObjects(getObjects(null));
     setBackground("RecordsM.png");
     addObject(new Atras(20,20),20,20);
     addObject(new ScoreBoard(720,300),getWidth()/2,(getHeight()/2));
    }
    
    /* 
     * Metodo para recorrer las paginas de la ayuda
     */
    public void siguientePagina(){
     ayudaSig++;
        
        if(ayudaSig>=3)
        {
            preparaMenu();
            return;
        }
        
        setBackground(new GreenfootImage("AyudaM"+ayudaSig+".png"));
    
    }
    
}
